package 代码随想2._2链表;

/**
 * @author XXX
 * @date 2024-01-14 13:27
 */

/**
 * https://leetcode.cn/problems/swap-nodes-in-pairs/description/
 */
public class _4两两交换链表中的节点 {
    public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null)
            return head;
        ListNode newhead = new ListNode(-1);
        newhead.next = head;
        ListNode cur  = newhead;
        ListNode temp; // 临时节点，保存两个节点后面的节点
        ListNode firstnode; // 临时节点，保存两个节点之中的第一个节点
        ListNode secondnode; // 临时节点，保存两个节点之中的第二个节点
        while (cur.next!=null && cur.next.next!=null){
            temp = cur.next.next.next;
            firstnode = cur.next;
            secondnode = cur.next.next;
            cur.next = secondnode;
            secondnode.next = firstnode;
            firstnode.next = temp;
            cur = firstnode;
        }
        return newhead.next;
    }
}
